package cn.itcast.demo06;

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

/*
          java.util.Properties extends Hashtable
     Properties 类表示了一个持久的属性集，Properties 可保存在流中或从流中加载
     Properties 集合是一个唯一和IO流相结合的集合
     可以使用Properties 集合中的方法store，把集合中的临时数据，持久化写入到硬盘中存储
     可以使用Properties 集合中的方法load，把硬盘中的保存的文件（键值对） ，读取到集合中使用

     属性列表中的每个键值都是一个字符串
         Properties集合是一个双列集合，key和value都是字符串

 */
public class Demo03Properties {
    public static void main(String[] args) throws IOException {
        show03();
    }

    private static void show03() throws  IOException {
        /*
        load方法，把硬盘中保存的文件（键值对），读取到集合中使用
        load(InputStream inStream)
        load(Reader reader)
        参数；
        InputStream inStream；字节输入流，不能读取含有中文的键值对
        Reader reader；字符输入流，可以读取含有中文的键值对

        使用步骤；
        1，创建Properties集合对象，
        2，使用Properties集合对象中的方法load读取保存键值对的文件
        3，遍历Properties集合

        注意；
        1，存储键值对的文件中，键值对的链接符号一般用=或空格
        2，存储键值对的文件中，可以使用#进行注释，被注释的键值对不会再被读取
        3，存储键值对的文件中，键值默认都是字符串，不用再加引号
         */
        //  1，创建Properties集合对象，
        Properties prop = new Properties();
        //2，使用Properties集合对象中的方法load读取保存键值对的文件
        prop.load(new FileInputStream/*(FileReader)*/("E:\\WkJava\\day02-code\\prop.txt"));
        //3，遍历Properties集合
        Set<String> set = prop.stringPropertyNames();
        for (String key : set) {
            String value = prop.getProperty(key);
            System.out.println(key+"="+value);
        }
    }

    private static void show() {
        // Object setProperty(String key, String value)
        //          调用 Hashtable 的方法 put。
        //String getProperty(String key) 通过key找到value，相当于get
        //Set<String> stringPropertyNames()
        //创建Properties集合对象
        Properties prop = new Properties();
        //使用setProperty往集合中添加数据
        prop.setProperty("赵丽颖","165");
        prop.setProperty("高圆圆","162");
        prop.setProperty("古力娜扎","161");

        //使用stringPropertyNames把Properties集合中的键取出，存储到一个set集合中
        Set<String> set = prop.stringPropertyNames();

        //遍历集合
        for (String key : set) {

            //使用getProperty方法通过key获取value
            String value = prop.getProperty(key);
            System.out.println(key+"="+value);
        }
    }
}
